package br.boicotando.dominio;

import java.util.HashSet;
import java.util.Set;

@SuppressWarnings("serial")
public class Categoria extends Setor {

	private Setor setor;
	private Set<SubCategoria> subCategorias;

	public Categoria() {
		subCategorias = new HashSet<SubCategoria>();
	}
	
	public Setor getSetor() {
		return setor;
	}
	
	public void setSetor(Setor setor) {
		if (this.setor != null && this.setor.contemCategoria(this)) {
			this.setor.removeCategoria(this);
		}
		this.setor = setor;
		if (setor != null && !setor.contemCategoria(this)) {
			setor.adicionaCategoria(this);
		}
	}

	public boolean adicionaSubCategoria(SubCategoria s) {
		boolean adicionou = subCategorias.add(s);
		if (!equals(s.getCategoria())) {
			s.setCategoria(this);
		}
		return adicionou;
	}
	
	public boolean contemSubCategoria(SubCategoria s) {
		return subCategorias.contains(s);
	}

	public SubCategoria[] getSubCategorias(SubCategoria[] a) {
		return subCategorias.toArray(a);
	}

	public boolean removeSubCategoria(SubCategoria s) {
		boolean removeu = subCategorias.remove(s);
		if (equals(s.getCategoria())) {
			s.setCategoria(null);
		}
		return removeu;
	}
	
	public void removeSubcategorias() {
		for (SubCategoria subCategoria : subCategorias) {
			subCategoria.setCategoria(null);
		}
	}

	@Override
	public boolean adicionaCategoria(Categoria c) {
		if (setor == null) {
			return false;
		}
		return setor.adicionaCategoria(c);
	}

	@Override
	public boolean contemCategoria(Categoria c) {
		if (setor == null) {
			return false;
		}
		return setor.contemCategoria(c);
	}

	@Override
	public Categoria[] getCategorias(Categoria[] a) {
		if (setor == null) {
		  return super.getCategorias(a);
		}
		return setor.getCategorias(a);
	}

	@Override
	public boolean removeCategoria(Categoria c) {
		if (setor == null) {
			return false;
		}
		return setor.removeCategoria(c);
	}
	
}
